/**
 * @file create_list.cpp
 * @author mixinju@outlook.com
 * @brief 使用头插或者尾插创建链表
 * @version 0.1
 * @date 2021-11-20
 *
 * @copyright Copyright (c) 2021
 *
 */
#include <iostream>

#include "list.h"
using namespace std;

/**
 * @brief 使用头插法创建一个链表，以输入 -1 结束
 *
 * @return ListNode*
 */
ListNode* createInHeadInsert() {
  ListNode* head = nullptr;
  int data;
  while (cin >> data && data != -1) {
    ListNode* currNode = new ListNode(data, head);
    head = currNode;  //更新头部
  }

  return head;
}

/**
 * @brief 使用尾插法创建链表，以输入特定值结束
 *
 * @return ListNode*
 */
ListNode* createInTailInsert() {
  ListNode* dummy = new ListNode();  //创建哑结点
  ListNode* pre = dummy;             //真正移动的是pre

  int data;

  while (cin >> data && data != -1) {
    ListNode* temp = new ListNode(data);
    pre->next_ = temp;
    pre = pre->next_;
  }

  pre = dummy->next_;  //这里的操作主要是为了回收内存的
  delete dummy;  // dummy在推内存里面分配。必须手动释放dummy
  return pre;    // pre在栈空间里面，自动释放
}